package com.jxmcloud.business.cut.service.user;

import com.jxmcloud.business.cut.vo.client.GetInviteAwardProgressVo;
import com.jxmcloud.business.cut.vo.client.GetInviteAwardVo;
import com.jxmcloud.business.cut.vo.user.PlayerInfoVo;

/**
 * 活动类数据接口
 */
public interface IUserActivityService extends IUserService {

    /**
     * 开始新活动
     *
     * @param player
     */
    void makeNewActivity(PlayerInfoVo player);

    /**
     * 检测活动是否失效  24小时
     *
     * @param player
     * @return
     */
    boolean checkNewActivityValid(PlayerInfoVo player);

    /**
     * 检测复活
     * @param player
     * @return 复活步骤
     */
    Integer checkReliveActivity(PlayerInfoVo player);

    /**
     * 是否需要复活
     * @param player
     * @return
     */
    boolean isNeedRelive(PlayerInfoVo player);

    /**
     * 活动是否已结束
     * @param activityId
     * @return
     */
    boolean isActivityEnd(Integer activityId);

    /**
     * 检测直播任务是否完成
     *
     * @param player
     * @return
     */
    Integer checkWatchLiveFinish(PlayerInfoVo player);

    /**
     * 检测新增邀请人
     *
     * @param player 助力人
     * @param targetUid
     * @param targetActivityId
     * @param userTypeParam 1是新用户, 0是老用户, null则会查询判断用户类型
     * @return
     */
    boolean checkAddInvitedPlayer(PlayerInfoVo player, Integer targetUid, Integer targetActivityId, Integer userTypeParam);

    /**
     * 领取邀请成功的奖励
     *
     * @param player
     */
    GetInviteAwardVo getInviteSuccessAward(PlayerInfoVo player);

    /**
     * 领取分享流程邀请成功的奖励
     *
     * @param player
     */
    GetInviteAwardProgressVo getInviteSuccessAwardProgress(PlayerInfoVo player);

    /**
     * 是否还有助力成功但未领取奖励
     * @param player
     * @return
     */
    boolean isHasHelpNotice(PlayerInfoVo player);

    /**
     * 移除用户的一个通知
     *
     * @param player
     * @param oneNotice
     * @return
     */
    Void removeNoticeType(PlayerInfoVo player, Integer oneNotice);

    /**
     * 移除用户的所有通知
     * @param player
     */
    void removeAllNoticeType(PlayerInfoVo player);

    /**
     * 增加用户一个通知
     *
     * @param player
     * @param oneNotice
     * @return
     */
    Void addNoticeType(PlayerInfoVo player, Integer oneNotice);

    /**
     * 获取发送到客户端的通知列表
     * @param player
     * @return
     */
    Integer[] getSendClientNoticeType(PlayerInfoVo player);

    /**
     * 是否含有某个通知
     * @param player
     * @param oneNotice
     */
    boolean isHasNotice(PlayerInfoVo player, Integer oneNotice);

    /**
     * 增加分享次数
     * @param player
     */
    void addShareCount(PlayerInfoVo player, Integer addCount);

    /**
     * 重置用户的活动, 回到初始状态
     *
     * @param player
     */
    void resetActivity(PlayerInfoVo player);

    /**
     * 计算剩余所需新人邀请数
     *
     * @param player
     * @param curCount
     * @return
     */
    int calLeftNeedNewerCount(PlayerInfoVo player, int curCount);

    /**
     * 获取所有需要新人邀请的数量
     * @param startId
     * @return
     */
    int getAllNeedNewerCount(Integer startId);

    /**
     * 是否完成邀请所有新人
     * @param player
     * @return
     */
    boolean isFinishInviteAllNewer(PlayerInfoVo player);
}
